package com.proxy;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

//影星的经纪人
public class MovieStarProxy implements InvocationHandler {

    private Object targetObject;//被代理的影星对象


    //传入一个代理之前的对象，返回一个被代理对象。
    public Object newProxyInstance(Object targetObject){
        this.targetObject=targetObject;

        return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
                targetObject.getClass().getSuperclass().getInterfaces(),this);
    }

    //演戏之前要做的事情
    private void beforeAct(){
        System.out.println("洽谈档期..");
        System.out.println("洽谈片酬..");
        System.out.println("洽谈广告合作..");
    }

    //演戏之后要做的事情
    private void afterAct(){
        System.out.println("洽谈首映仪式..");
        System.out.println("洽谈颁奖典礼..");
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object ret = null;
        this.beforeAct();
        ret = method.invoke(targetObject, args); //调用真正成龙演戏的方法
        this.afterAct();

        return ret;
    }
}
